#include "Lista_ordenada_diccionarios.h"

void LO_Crear(TListaOrdenada *pLo, int TamanioDato)
{
	L_Crear(pLo,TamanioDato);
}

void LO_Vaciar(TListaOrdenada *pLo)
{
	L_Vaciar(pLo);
}

int LO_Vacia(TListaOrdenada *pLo)
{
	return (L_Vacia(*pLo));
}

void LO_Elem_Cte(TListaOrdenada *pLo, void *pE)
{
	L_Elem_Cte(*pLo,pE);
}

int LO_Mover_Cte(TListaOrdenada *pLo, TMovimiento_Lo M)
{
	return L_Mover_Cte(pLo,M);
}

void LO_Borrar_Cte(TListaOrdenada *pLo)
{
	L_Borrar_Cte(pLo);
}

int LO_Insertar(TListaOrdenada *pLo, void* pE)
{
	int Error;
	char* NombreE;
	char* NombreCorriente;
	NombreE=(char*)malloc(TDiccionario_sizeDato(pE,"screen_name"));
	TDiccionario_obtener(pE,"screen_name",NombreE);
	if(!L_Vacia(*pLo)){
        TDiccionario ElementoCorriente;
        int No_Fin_Lista;
        int encontrado=0;
        L_Mover_Cte(pLo,L_Primero);
        do{
            L_Elem_Cte(*pLo,&ElementoCorriente);
            NombreCorriente=(char*)malloc(TDiccionario_sizeDato(&ElementoCorriente,"screen_name"));
            TDiccionario_obtener(&ElementoCorriente,"screen_name",NombreCorriente);
            if(strcmp(NombreE,NombreCorriente)>0){
                No_Fin_Lista=L_Mover_Cte(pLo,L_Siguiente);
            }
            else{  /*Si la clave del elemento a insertar es menor a la clave del elemento corriente...*/
                encontrado=1;
                Error=L_Insertar_Cte(pLo,L_Anterior,pE);
            }
            free(NombreCorriente);
        }while(!encontrado&&No_Fin_Lista);
        if(!No_Fin_Lista){ /*Si alcanzó el final de la lista...*/
            Error=L_Insertar_Cte(pLo,L_Siguiente,pE);
        }
	}
	else{ /*Si la lista estaba vacía...*/
        Error=L_Insertar_Cte(pLo,L_Primero,pE);
	}
	free(NombreE);
	return Error;
}
